package psrc.bd.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import psrc.logic.util.beans.ProdutoDefeitoBean;

public class ProdutoDefeitoDAO extends AbstractDAO {

	public ProdutoDefeitoDAO(Connection conn) {
		super(conn);
	}

	@Override
	public <T> void adiciona(T _bean) throws SQLException{
		ProdutoDefeitoBean bean = (ProdutoDefeitoBean) _bean;
		String sql = "insert into ProdutoDefeito "
				+ "(fk_defeito, descricao_defeito, referencia, materiais, cor, produto, tamanho, quantidade, preco) values (?, ?, ?, ?, ?, ?, ?, ?, ?)";
			PreparedStatement stmt = connection.prepareStatement(sql);

			stmt.setString(1, bean.getFkDefeito());
			stmt.setString(2, bean.getDescricaoDefeito());
			stmt.setString(3, bean.getReferencia());
			stmt.setString(4, bean.getMateriais());
			stmt.setString(5, bean.getCor());
			stmt.setString(6, bean.getProduto());
			stmt.setString(7, bean.getTamanho());
			stmt.setString(8, bean.getQuantidade());
			stmt.setString(9, bean.getPreco());
			
			stmt.execute();
			stmt.close();

	}

	@Override
	public <T> void remove(T _bean) throws SQLException{
		ProdutoDefeitoBean bean = (ProdutoDefeitoBean) _bean;
			PreparedStatement stmt = connection.prepareStatement("delete from ProdutoDefeito where id_produto_defeito=?");

			stmt.setInt(1, Integer.parseInt(bean.getIdProdutoDefeito()));

			stmt.execute();
			stmt.close();

	}

	@Override
	public <T> void edita(T _bean) throws SQLException{
		ProdutoDefeitoBean bean = (ProdutoDefeitoBean) _bean;

		String sql = "update ProdutoDefeito set " +"fk_defeito=?, descricao_defeito=?, referencia=?, materiais=?, cor=?, produto=?, tamanho=?, quantidade=?, preco=? where produto_defeito=?";
			PreparedStatement stmt = connection.prepareStatement(sql);

			stmt.setString(1, bean.getFkDefeito());
			stmt.setString(2, bean.getDescricaoDefeito());
			stmt.setString(3, bean.getReferencia());
			stmt.setString(4, bean.getMateriais());
			stmt.setString(5, bean.getCor());
			stmt.setString(6, bean.getProduto());
			stmt.setString(7, bean.getTamanho());
			stmt.setString(8, bean.getQuantidade());
			stmt.setString(9, bean.getPreco());
			stmt.setInt(10, Integer.parseInt(bean.getIdProdutoDefeito()));
			stmt.execute();
			stmt.close();
	}

	@Override
	public <T> List<T> seleciona() throws SQLException{
		List<ProdutoDefeitoBean> produto_defeitos = new ArrayList<ProdutoDefeitoBean>();

			PreparedStatement stmt = connection.prepareStatement("select * from ProdutoDefeito");

			ResultSet rs = stmt.executeQuery();

			while (rs.next()) {
				ProdutoDefeitoBean bean = new ProdutoDefeitoBean();
				bean.setFkDefeito(rs.getString("fk_defeito"));
				bean.setDescricaoDefeito(rs.getString("descricao_defeito"));
				bean.setReferencia(rs.getString("referencia"));
				bean.setMateriais(rs.getString("materiais"));
				bean.setCor(rs.getString("cor"));
				bean.setProduto(rs.getString("produto"));
				bean.setTamanho(rs.getString("tamanho"));
				bean.setQuantidade(rs.getString("quantidade"));
				bean.setPreco(rs.getString("preco"));
				bean.setIdProdutoDefeito(rs.getString("id_produto_defeito"));

				produto_defeitos.add(bean);
			}
			rs.close();
			stmt.close();
			return (List<T>) produto_defeitos;
	}

@Override
	public <T> List<T> selecionaPorId(T param) throws SQLException {
		List<ProdutoDefeitoBean> produto_defeitos = new ArrayList<ProdutoDefeitoBean>();
		ProdutoDefeitoBean user = (ProdutoDefeitoBean) param;
			PreparedStatement stmt = connection
					.prepareStatement("select * from ProdutoDefeito where id_produto_defeito=?");
			stmt.setString(1, user.getIdProdutoDefeito());
			ResultSet rs = stmt.executeQuery();
			
			while (rs.next()) {
				ProdutoDefeitoBean bean = new ProdutoDefeitoBean();
				bean.setFkDefeito(rs.getString("fk_defeito"));
				bean.setDescricaoDefeito(rs.getString("descricao_defeito"));
				bean.setReferencia(rs.getString("referencia"));
				bean.setMateriais(rs.getString("materiais"));
				bean.setCor(rs.getString("cor"));
				bean.setProduto(rs.getString("produto"));
				bean.setTamanho(rs.getString("tamanho"));
				bean.setQuantidade(rs.getString("quantidade"));
				bean.setPreco(rs.getString("preco"));
				bean.setIdProdutoDefeito(rs.getString("id_produto_defeito"));

				produto_defeitos.add(bean);
			}
			rs.close();
			stmt.close();
			return (List<T>) produto_defeitos;
	}
}
